package 扑克牌的顺序;

import java.lang.reflect.Array;
import java.util.Arrays;

//从扑克牌中随机抽取5张牌，判断是不是一个顺子，即这5张牌是不是连续的，2-10是数字本身，。。大小王是任意数字，用0表示
public class Solution
{
    public boolean isContinuous(int [] numbers)
    {
        //剑指offer的方法，先排序，计算所有相邻字符间的空缺，对比与0的个数，出现对子肯定不是顺子
        //判断输入
        if (numbers==null||numbers.length==0)
            return false;
        int numOf0=0;
        int numOfGap=0;
        Arrays.sort(numbers);
        for (int i = 0; i < numbers.length-1; i++)
        {
            //计算0的个数
            if (numbers[i]==0)
            {
                numOf0++;
                continue;//进行下一次循环
            }
            //对子,顺序不能变
            if (numbers[i]==numbers[i+1])
                return false;


            numOfGap+=numbers[i+1]-numbers[i]-1;
        }
        if (numOf0>=numOfGap)
            return true;
        return false;
    }
    //还有一种方法，numbers，满足几个条件即可，
    // 最大值-最小值（不包含0）<5,没有对子，数组长度为5


    public boolean isContinuous1(int [] numbers) {
        int[]d = new int[14];
        d[0] = -5;
        int len = numbers.length;
        int max = -1;
        int min = 14;
        for(int i =0;i<len;i++){
            d[numbers[i]]++;
            if(numbers[i] == 0){
                continue;//开始下一次循环，没必要走下面的语句了
            }
            if(d[numbers[i]]>1){
                return false;
            }
            if(numbers[i] >max){
                max = numbers[i];
            } if(numbers[i] <min){
                min = numbers[i];
            }

        }
        if(max -min<5){
            return true;
        }
        return false;
    }


}
